/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.entity.Anotacao;
import br.jm.acionista.sistema.eao.AnotacaoEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class AnotacaoBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Anotacao selectedAnotacao;
    private LazyDataModel<Anotacao> lazyModel;
    private AnotacaoEao anotacaoJpa;
    private int nTotalReg;
    private String cSql;
    private String cPagina;

    public AnotacaoBean() {
        anotacaoJpa = AnotacaoEao.getInstance();
        selectedAnotacao = new Anotacao();

        cPagina = FacesContext.getCurrentInstance().getViewRoot().getViewId();

        cSql = null;
        if (cPagina.matches(".*subscricao.*")) {
            cSql = "id_anotacao >= 4 and id_anotacao <= 5 ";
        } else if (cPagina.matches(".*averbacao.*")) {
            cSql = "id_anotacao = 6 or id_anotacao = 8 or id_anotacao = 9 ";
        }
        
        lazyModel = new LazyDataModel<Anotacao>() {

            @Override
            public List<Anotacao> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {

                List<Anotacao> lazyAnotacao = new ArrayList<Anotacao>();

                try {
                    lazyAnotacao = anotacaoJpa.getNative("Anotacao", first, pageSize, sortField, sortOrder, filters, null,cSql);
                } catch (Exception ex) {
                    Logger.getLogger(AnotacaoBean.class.getName()).log(Level.SEVERE, null, ex);
                }
                return lazyAnotacao;
            }
        };

        nTotalReg = anotacaoJpa.getCount("Anotacao");
        if (nTotalReg == 0) {
            nTotalReg = 1;
            selectedAnotacao = new Anotacao();
        }
        lazyModel.setRowCount(nTotalReg);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            selectedAnotacao.setIdAnotacao(null);
            anotacaoJpa.create(selectedAnotacao);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Anotacao Inserido com Sucesso", "");

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            anotacaoJpa.edit(selectedAnotacao);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Anotacao Alterado com Sucesso", "");
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: ", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedAnotacao.getIdAnotacao().compareTo(1) == 0 || selectedAnotacao.getIdAnotacao().compareTo(10) == 0) {
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "ATENÇÃO ... Esta Anotação não pode ser Excluido ... Anotação de Controle do Sistema!", "");
            } else {
                anotacaoJpa.destroy(selectedAnotacao);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Anotacao Excluido com Sucesso", "");
            }

            
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: ", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public Anotacao novo() {
        this.selectedAnotacao = new Anotacao();

        return this.selectedAnotacao;
    }

    public LazyDataModel<Anotacao> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<Anotacao> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public Anotacao getSelectedAnotacao() {
        return selectedAnotacao;
    }

    public void setSelectedAnotacao(Anotacao selectedAnotacao) {
        if (selectedAnotacao == null) {
            selectedAnotacao = new Anotacao();
        }
        this.selectedAnotacao = selectedAnotacao;
    }
}
